gsk: Rename set_offset() to set_anchor_point()
authorEmmanuele Bassi <ebassi@gnome.org>
Thu, 4 Aug 2016 14:20:06 +0000 (15:20 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Tue, 18 Oct 2016 10:49:11 +0000 (11:49 +0100)
The naming is consistent with other scene graph libraries, as it
represents an additional translation transformation applied on top of
the provided transformation matrices.

We can also simplify the implementation by applying the translation when
we compute the world matrix.

gsk/gskrendernode.c
gsk/gskrendernode.h
gsk/gskrendernodeprivate.h
gtk/gtkwidget.c

index 45cdd546d0d813db1f84d5e85baace704d81107a..ecf38a27a0061408aba2313c1cfbef77b8db3da7 100644 (file)
@@ -178,7 +178,8 @@ gsk_render_node_init (GskRenderNode *self)
 
   graphene_matrix_init_identity (&self->transform);
   graphene_matrix_init_identity (&self->child_transform);
-  graphene_point3d_init (&self->offset, 0.f, 0.f, 0.f);
+
+  graphene_point3d_init (&self->anchor_point, 0.f, 0.f, 0.f);
 
   self->opacity = 1.0;
 
@@ -935,24 +936,17 @@ gsk_render_node_set_transform (GskRenderNode           *node,
   else
     graphene_matrix_init_from_matrix (&node->transform, transform);
 
-  graphene_matrix_translate (&node->transform, &node->offset);
-
   node->transform_set = !graphene_matrix_is_identity (&node->transform);
 }
 
 void
-gsk_render_node_set_offset (GskRenderNode            *node,
-                            const graphene_point3d_t *offset)
+gsk_render_node_set_anchor_point (GskRenderNode            *node,
+                                  const graphene_point3d_t *offset)
 {
   g_return_if_fail (GSK_IS_RENDER_NODE (node));
   g_return_if_fail (node->is_mutable);
 
-  graphene_point3d_scale (&node->offset, -1, &node->offset);
-  graphene_matrix_translate (&node->transform, &node->offset);
-  graphene_point3d_init_from_point (&node->offset, offset);
-  graphene_matrix_translate (&node->transform, &node->offset);
-
-  node->transform_set = !graphene_matrix_is_identity (&node->transform);
+  graphene_point3d_init_from_point (&node->anchor_point, offset);
 }
 
 /**
@@ -1197,6 +1191,8 @@ gsk_render_node_update_world_matrix (GskRenderNode *node,
           if (node->transform_set)
             graphene_matrix_multiply (&tmp, &node->transform, &tmp);
 
+          graphene_matrix_translate (&tmp, &node->anchor_point);
+
           graphene_matrix_multiply (&tmp, &parent->world_matrix, &node->world_matrix);
         }
 
index 2d03b4bdd29c8d78991adaf16fb60a22621a6100..ced26308726bc4185f9d7a7a21b17f02e970620f 100644 (file)
@@ -89,17 +89,17 @@ gboolean                gsk_render_node_contains                (GskRenderNode *
                                                                 GskRenderNode *descendant);
 
 GDK_AVAILABLE_IN_3_22
-void                    gsk_render_node_set_bounds              (GskRenderNode         *node,
-                                                                 const graphene_rect_t *bounds);
+void                    gsk_render_node_set_bounds              (GskRenderNode            *node,
+                                                                 const graphene_rect_t    *bounds);
 GDK_AVAILABLE_IN_3_22
-void                    gsk_render_node_set_transform           (GskRenderNode           *node,
-                                                                 const graphene_matrix_t *transform);
+void                    gsk_render_node_set_transform           (GskRenderNode            *node,
+                                                                 const graphene_matrix_t  *transform);
 GDK_AVAILABLE_IN_3_22
-void                    gsk_render_node_set_offset              (GskRenderNode         *node,
+void                    gsk_render_node_set_anchor_point        (GskRenderNode            *node,
                                                                  const graphene_point3d_t *offset);
 GDK_AVAILABLE_IN_3_22
-void                    gsk_render_node_set_child_transform     (GskRenderNode           *node,
-                                                                 const graphene_matrix_t *transform);
+void                    gsk_render_node_set_child_transform     (GskRenderNode            *node,
+                                                                 const graphene_matrix_t  *transform);
 GDK_AVAILABLE_IN_3_22
 void                    gsk_render_node_set_opacity             (GskRenderNode *node,
                                                                  double         opacity);
index 3b74eb768a9a0bd3ac2f8a002db7aed0ca868e35..0dce7470268820df8b5c36dce8bc3af5e497e04b 100644 (file)
@@ -53,7 +53,7 @@ struct _GskRenderNode
   /* Transformations applied to the node */
   graphene_matrix_t transform;
 
-  graphene_point3d_t offset;
+  graphene_point3d_t anchor_point;
 
   /* Transformations applied to the children of the node */
   graphene_matrix_t child_transform;
index 8946c35c20aaf3cbe645c1b3b5a9b8fee25dbdf6..f2f4d5a6d9e1724e238f9504b16b16455d5cef29 100644 (file)
@@ -15872,12 +15872,14 @@ gtk_widget_get_render_node (GtkWidget   *widget,
       gsk_render_node_set_name (tmp, str);
       gsk_render_node_set_bounds (tmp, &bounds);
       gsk_render_node_set_transform (tmp, &m);
+      gsk_render_node_set_anchor_point (tmp,
+                                        graphene_point3d_init (&p, clip.x - alloc.x,
+                                                                   clip.y - alloc.y,
+                                                                   0.f));
+
       cr = gsk_render_node_get_draw_context (tmp);
       cairo_translate (cr, alloc.x - clip.x, alloc.y - clip.y);
-      gsk_render_node_set_offset (tmp, graphene_point3d_init (&p, clip.x - alloc.x, clip.y - alloc.y, 0.f));
-
       gtk_widget_draw (widget, cr);
-
       cairo_destroy (cr);
 
       g_free (str);